package com.lmf.rabbitmq.eight;

import com.lmf.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 死信的三大来源： 1.消息被拒绝     2.消息过期       3.正常队列长度达到最长，多出的消息会被转发到死信队列
 *
 * 模拟实现死信队列：（生产者01）
 *          consumer 从 queue 取出消息 进行消费，但某些时候由于特定的原因导致 queue 中的某些消息无法被消费，
 *          这样的消息如果没有后续的处理，就变成了死信，有死信自然就有了死信队列。死信队列可以再通过其他消费者接收
 *
 */
public class Provider {
    //定义普通交换机名称
    private static final String NORMAL_EXCHANGE = "normal_exchange";
    //定义普通队列名称
    private static final String NORMAL_NAME = "normal_name";

    public static void main(String[] args) throws IOException, TimeoutException {
        //获取信道
        Channel channel = RabbitMqUtils.getChannel();

        //设置消息的 TTL 时间 10s: 设置消息过期时间
//        AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().expiration("10000").build();

        //批量发送消息
        for (int i = 0; i < 10; i++) {
            String message = i + "";
            //发送消息
//            channel.basicPublish(NORMAL_EXCHANGE,"zhangsan",properties,message.getBytes());//设置消息过期时间
            channel.basicPublish(NORMAL_EXCHANGE,"zhangsan",null,message.getBytes());//不设置消息过期时间
        }
        System.out.println("发送成功！");
    }
}
